def registry_setstate(self, state):
    provided = state["_provided"]
    for iface, order in provided.iteritems():
        broken_iface = interface.rebuildBrokenInterface(iface)
        if broken_iface.extends(IBroken):
            provided[broken_iface] = provided.pop(iface)

            for registry in ("_adapters", "_subscribers"):
                byorder = state[registry]
                for components in byorder:
                    rebuildBrokenRegisrations(iface, broken_iface, components)

    return orig_registry(self, state)
def components_setstate(self, state):
    registrations = state["_adapter_registrations"]
    for key, value in registrations.items():
        required, provided, name = key
        broken = False

        required = list(required)
        for idx, iface in enumerate(required):
            iface = interface.rebuildBrokenInterface(iface)
            if iface.extends(IBroken):
                required[idx] = iface
                broken = True
        required = tuple(required)

        provided = interface.rebuildBrokenInterface(provided)
        if provided.extends(IBroken):
            broken = True

        if broken:
            registrations[(required, provided, name)] = registrations.pop(key)

    registrations = state["_utility_registrations"]
    for key, value in registrations.items():
        provided, name = key
        provided = interface.rebuildBrokenInterface(provided)
        if provided.extends(IBroken):
            registrations[(provided, name)] = registrations.pop(key)

    registrations = state["_subscription_registrations"]
    for index, (required, provided, name, factory, info) in enumerate(registrations):
        broken = False

        required = list(required)
        for idx, iface in enumerate(required):
            iface = interface.rebuildBrokenInterface(iface)
            if iface.extends(IBroken):
                required[idx] = iface
                broken = True
        required = tuple(required)

        provided = interface.rebuildBrokenInterface(provided)
        if provided.extends(IBroken):
            broken = True

        if broken:
            registrations[index] = (required, provided, name, factory, info)

    registrations = state["_handler_registrations"]
    for index, (required, name, factory, info) in enumerate(registrations):
        broken = False

        required = list(required)
        for idx, iface in enumerate(required):
            iface = interface.rebuildBrokenInterface(iface)
            if iface.extends(IBroken):
                required[idx] = iface
                broken = True
        required = tuple(required)

        if broken:
            registrations[index] = (required, name, factory, info)

    self.__dict__.update(**state)